package com.demo.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

/***
 * 连接数据库：
 * 1.导入MySQL包，及jdbc包(导入数据库驱动)
 * 2.配置：
 *      spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
 *      spring.datasource.url=jdbc:mysql://127.0.0.1:3306/my_blog?useUnicode=true&characterEncoding=UTF-8
 *          &useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
 *      spring.datasource.username=root
 *      spring.datasource.password=root
 *   配置完以上属性，Spring 会自动装配好DataSource，JdbcTemplate，可以直接使用。
 *
 *   spring.datasource.type= 可以指定默认的数据源，默认使用com.zaxxer.hikari.HikariDataSource，
 *   还可支持：
 *   org.apache.tomcat.jdbc.pool.DataSource，
 *   org.apache.commons.dbcp2.BasicDataSource
 *   导入依赖包，更改配置 即可。
 *
 *   配置自定义的DataSource
 *   只需自己定义DataSource 并装配到Spring容器中即可
 *
 *   ------事务-------
 *
 *   首先@EnableTransactionManagement 启用事务
 *   然后在使用事务的方法上加上 @Transactional 注解
 *   注：
 *    1.使用的数据要支持事务
 *    2.直接使用事务的方法上必须使用@Transactional 注解 且为 public 方法
 */
@SpringBootApplication
@EnableTransactionManagement
public class App {
    public static void main(String[] args) throws SQLException {
        ConfigurableApplicationContext context = SpringApplication.run(App.class, args);
        System.out.println(context.getBean(DataSource.class));
        DataSource dataSource = context.getBean(DataSource.class);
        Connection conn = dataSource.getConnection();
        System.out.println(conn.getCatalog());
        System.out.println(conn.getClass());

        System.out.println(context.getBean(JdbcTemplate.class));
        //context.getBean(TagDao.class).addTag("express","node web 框架",1);
        context.getBean(TagDao.class).addTagBatch("express",1,"four","five","six");
        conn.close();
        context.close();
    }
}
